#include "NodeEvent.h"

namespace model {

DEFINE_EVENT(EVENT_ADD_NODE,       EventAddNode,      ParentAndChild);
DEFINE_EVENT(EVENT_REMOVE_NODE,    EventRemoveNode,   ParentAndChild);
DEFINE_EVENT(EVENT_RENAME_NODE,    EventRenameNode,   NodeWithNewName);


//////////////////////////////////////////////////////////////////////////
// INITIALIZATION
//////////////////////////////////////////////////////////////////////////

ParentAndChild::ParentAndChild( NodePtr parent, NodePtr child )
    :  mParent(parent)
    ,  mChild(child) 
{
}

//////////////////////////////////////////////////////////////////////////
// GET/SET
//////////////////////////////////////////////////////////////////////////

NodePtr ParentAndChild::getParent() const
{
    return mParent;
}

NodePtr ParentAndChild::getChild() const
{
    return mChild;
}

//////////////////////////////////////////////////////////////////////////
// LOGGING
//////////////////////////////////////////////////////////////////////////

std::ostream& operator<<( std::ostream& os, const ParentAndChild& obj )
{
    os << &obj << '|' << obj.mParent << '|' << obj.mChild;
    return os;
}

//////////////////////////////////////////////////////////////////////////
// INITIALIZATION
//////////////////////////////////////////////////////////////////////////

NodeWithNewName::NodeWithNewName( NodePtr node, wxString name )
    :   mNode(node)
    ,   mName(name)
{
}

//////////////////////////////////////////////////////////////////////////
// GET/SET
//////////////////////////////////////////////////////////////////////////

NodePtr NodeWithNewName::getNode() const
{
    return mNode;
}

wxString NodeWithNewName::getName() const
{
    return mName;
}

//////////////////////////////////////////////////////////////////////////
// LOGGING
//////////////////////////////////////////////////////////////////////////

std::ostream& operator<<( std::ostream& os, const NodeWithNewName& obj )
{
    os << &obj << '|' << obj.mNode << '|' << obj.mName;
    return os;
}

} // namespace